///PHILOTES Source Code.  (C)2012 PhiloLabs
#pragma once

#ifndef __TagPoint_H_
#define __TagPoint_H_

#include "OgrePrerequisites.h"

#include "OgreBone.h"
#include "math/matrix4.h "

namespace Ogre	{


	
	
	
	
    class _OgreExport TagPoint : public Bone
	{

	public:
		TagPoint(unsigned short handle, Skeleton* creator);
		virtual ~TagPoint();

		Entity *getParentEntity(void) const;
        MovableObject* getChildObject(void) const;
		
		void setParentEntity(Entity *pEntity);
		void setChildObject(MovableObject *pObject);

        
        void setInheritParentEntityOrientation(bool inherit);

        
        bool getInheritParentEntityOrientation(void) const;

        
        void setInheritParentEntityScale(bool inherit);

        
        bool getInheritParentEntityScale(void) const;

		
		const Matrix4& getParentEntityTransform(void) const;

        
		const Matrix4& _getFullLocalTransform(void) const;

        
        void needUpdate(bool forceParentUpdate = false);

        
        void updateFromParentImpl(void) const;
        
        const LightList& getLights(void) const;



	private:
		Entity *mParentEntity;
		MovableObject *mChildObject;
        mutable Matrix4 mFullLocalTransform;
        bool mInheritParentEntityOrientation;
        bool mInheritParentEntityScale;
	};

	
	

} //namespace


#endif//__TagPoint_H_
